package com.yupi.oj.interceptor;

/**
 * @Author FengHuan Wang
 * @Date 2025/3/8 9:13
 * @Version 1.0
 */

import cn.hutool.core.util.StrUtil;
import cn.hutool.jwt.JWTUtil;
import com.yupi.oj.common.ErrorCode;
import com.yupi.oj.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 */
@Component
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            return true; // 放行 OPTIONS 请求
        }
        //获取请求url，判断请求url是否包含login，包含说明是的能录操作，放行
        //获取token
        String token = request.getHeader("token");
        log.info("令牌={}", token);

        //如果token为空，不放行
        if (StrUtil.isEmpty(token)){
            throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR, "token为空");
        }

        //token存在，解析token，如果解析失败，就返回未登录
        try{
            JWTUtil.parseToken(token);
        }
        catch(Exception exception){
            log.error("token解析失败");
            throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR);
        }
        return true;
    }
}
